package com.cloudkinto.service.order.vo.yahoo;

import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
public class OrderYahooDetailEntity {
    List<Pay> pay;
    List<Item> item;
    List<Ship> ship;
    List<Detail> detail;

    private String orderId;

    /**
     * 拆分源订单 ID
     */
    private String parentOrderId;

    /**
     * 拆分后的订单ID
     */
    private String childOrderId;

    /**
     * 下订单的日期和时间（在购物车中按下订单确认按钮的日期和时间）（例）2012-04-19T16:10:40
     */
    //2012-04-19T16:10:40 格式不一样
    private String orderTime;

    /**
     * 上次更新订单信息的日期和时间。
     */
    //2012-04-19T16:10:40+09:00
    private Date lastUpdateTime;

    /**
     * 1 : 予約中2 : 処理中 3 : 保留 4 : キャンセル 5 :  完了
     */
    private String orderStatus;

    /**
     * 这是商店可以为订单信息独立设置的状态。
     */
    private String storeStatus;

    /**
     * 买家评论
     */
    private String buyerComments;

    /**
     * 卖家评论
     */
    private String sellerComments;

    /**
     * 店内备忘 是通过订单管理工具进入店铺时在店铺中的备忘录。
     */
    private String notes;


    /**
     * 设备类型 1 = PC，2 = MB，3 = 智能手机，4 = 平板电脑
     */
    private String deviceType;

    /**
     * 移动运营商名称
     */
    private String mobileCarrierName;

    /**
     * 已查看标志 false：未查看 true：已查看
     */
    private Boolean isSeen;

    /**
     * 拆分标志 false：未拆分 true：拆分
     */
    private Boolean isSplit;

    /**
     * 取消原因 100：取消 110：退货 120：未付款 130：地址不明 140：拒绝收货 150：联系失败 160：重复订单 170：无法付款检查 180：其他 300：错误订单 310：使用积分 忘记 320：忘记了使用优惠券 330：我在别处找到便宜的价格 340：运费很高
     350：我想更改收货地址 360：我想更改送货方式
     370：我想更改付款方式 380：信用卡无法使用
     200：支付方式便利 210：缺货 220：停产
     230：其他 0：取消原因 不适用 系统取消
     空白：订单未取消

     */
    private String cancelReason;

    /**
     * 如果取消原​​因是“其他（230）”，则会显示商店输入的原因。除取消原因 230 外，它将为空白。
     */
    private String cancelReasonDetail;

    /**
     * 課金していいかどうかの判定です。 （テスト注文かどうかの判定となります。）
     */
    private Boolean isRoyalty;

    /**
     * 課金が確定しているかどうかの判定です。
     */
    private Boolean isRoyaltyFix;

    /**
     * 課金確定した日時です。
     */
    //2012-04-19T16:10:40+09:00
    private String royaltyFixTime;

    /**
     * 它是在商店本身在自己的商店进行购买测试时设置的
     */
    private Boolean isSeller;

    /**
     * 判断购买者是否进行了店铺评价。
     */
    private Boolean isRatingB2s;

    /**
     * 0：非恶作剧订单 1：淘气订单 2：淘气取消订单
     */
    private String suspect;

    /**
     * 当它被判断为恶作剧命令时，这是一条消息。
     */
    private String suspectMessage;

    /**
     * 下新订单时发送订单确认电子邮件的日期和时间。
     */
    //2012-04-19T16:10:40+09:00
    private String sendConfirmTime;

    /**
     * 付款时发送电子邮件的日期和时间。
     */
    //2012-04-19T16:10:40+09:00
    private String sendPayTime;

    /**
     * 推荐人
     */
    private String referer;

    /**
     * 购买者进入目标商店的商店页面的 URL。
     */
    private String entryPoint;

    /**
     * 优惠券使用 ID “UsageId”是一个唯一的 ID，始终为每个订单发布，并链接到该订单使用的优惠券信息。但是，它不处理优惠券 ID。
     */
    private Long usageId;

    /**
     * 使用的优惠券信息
     */
    private String useCouponData;

    /**
     * 总优惠券折扣
     */
    private Double totalCouponDiscount;

    /**
     * 是否使用免运费优惠券。0：无 1 ：有
     */
    private String shippingCouponFlg;

    /**
     * 这是申请免运费优惠券时的运费折扣金额。商店优惠券的折扣金额仅为运费的总折扣。
     */
    private Double shippingCouponDiscount;

    /**
     * 活动积分
     */
    private Integer campaignPoints;

    /**
     * 多个交货单标志
     */
    private Boolean isMultiShip;

    /**
     * 多个交货单 ID
     */
    private String multiShipId;

    /**
     * 确定订单中是否包含一级药物。
     */
    private Boolean isFirstClassDrugIncludes;

    /**
     * false、null：未承諾 true：承諾済み
     */
    private Boolean isFirstClassDrugAgreement;

    /**
     * 免费礼物（欢迎礼物）包含标志
     */
    private Boolean isWelcomeGiftIncludes;


    @Data
    public static class Pay {
        /**
         * 支付状态	0：未付款 1：已存款
         */
        private String payStatus;

        /**
         * 1 : 決済申込 2 : 支払待ち 3 : 支払完了 4 : 入金待ち5 : 決済完了6 : キャンセル7 : 返金8 : 有効期限切れ9 : 決済申込中10 : オーソリエラー11 : 売上取消12 : Suicaアドレスエラー
         */
        private String settleStatus;

        /**
         * 0：后付费 1：预付费
         */
        private String payType;

        /**
         * 付款方式	 0 : カード 1 : ネットバンキング 2 : キャリア決済 3 : 振込 4 : 代引 5 : コンビニ 6 : 電子マネー 7 : その他
         */
        private String payKind;

        /**
         * 这是由商店承担的结算费用。
         */
        private Double sellerHandlingCharge;

        /**
         * 购买历史详细信息屏幕 付款更新日期和时间。
         */
        //）2012-04-19T16:10:40+09:00
        private String payActionTime;

        /**
         * 入金处理备注
         */
        private String payNotes;

        /**
         * 付款 ID。
         */
        private String settleId;

        /**
         * 您是否需要在采购商输入的订单时开具发票。
         */
        private Boolean needBillSlip;
    }

    public static class Buyer {

    }

    @Data
    public static class Item {
        /**
         * 产品线编号
         */
        private Long lineId;

        private String itemId;

        private String title;

        /**
         * 产品子代码
         */
        private String subCode;

        private String imageId;

        private Integer categoryId;

        private String productId;

        private Double unitPrice;

        private Integer quantity;

        private String couponData;

        private Double couponDiscount;

        private Double originalPrice;

        private Integer originalNum;

        private String priceType;

    }

    public static class Seller {

    }

    @Data
    public static class Detail {
        /**
         * 商店设定的费用（货到付款等）和 Yahoo! 结算结算费用不包括在内。
         */
        private Double payCharge;

        /**
         * 运费（免运费券折扣后的金额）
         */
        private Double shipCharge;

        /**
         * 礼品包装费
         */
        private Double giftWrapCharge;

        /**
         * * 这不是优惠券折扣，而是商店下订单后在 Store Creator Pro 折扣字段中输入的值。
         */
        private Double discount;

        /**
         * 调整量* 负值是可以接受的，这种情况下-（10字节）是允许的最大值
         */
        private Double adjustments;

        private Double settleAmount;

        /**
         * 使用的点数使用
         */
        private Double usePoint;

        /**
         * 礼券使用金额
         */
        private Double giftCardDiscount;

        /**
         * 小计--使用积分+礼券+费用--折扣+运费+调整金额--商城优惠券折扣金额-部分优惠使用金额--礼券使用金额
         */
        private Double totalPrice;

        /**
         * 入金金額	 分割後注文には引き継ぎません。
         */
        private Double settlePayAmount;

    }

    @Data
    public static class Ship {
        /**
         * 0 : 出荷不可1 : 出荷可2 : 出荷処理中3 : 出荷完了4 : 着荷完了
         */
        private String shipStatus;

        private String shipMethod;

        private String shipMethodMame;

        /**
         * 配送希望日です。（YYYY-MM-DD）
         */
        private String shipRequestDate;

        /**
         * 配送希望時间 12:00～14:00など
         */
        private String shipRequestTime;

        private String shipNotes;

        /**
         * 1000：その他 1001：ヤマト運輸 1002：佐川急便1003：日本郵便 1004：西濃運輸 5001：店頭受け取り
         */
        private String shipCompanyCode;

        private String receiveShopCode;

        /**
         * 交货单号 1
         */
        private String shipInvoiceNumber1;

        /**
         * 运输单号 2
         */
        private String shipInvoiceNumber2;

        /**
         * 没有支票号码的原因	 NULL：（未注册状态） 101：对于直接从制造商等库存源发送的产品 102：对于不需要运输的产品103：对于在商店收到的产品
         104：对于从送货公司直接联系105：凭证编号由于运输方式未发出（无法追踪）


         */
        private String shipInvoiceNumberEmptyReason;

        /**
         * 配送会社URL	 商店通过工具和 API 设置的运输公司的跟踪 URL。
         */
        private String shipUrl;

        /**
         * 0：正常 1：今天的订单 2：明天的订单
         */
        private String arriveType;

        /**
         * 发货日期	(YYYY-MM-DD)
         */
        private String shipDate;

        private Date arrivalDate;

        private String shipFirstName;

        private String shipLastName;

        /**
         * 更新者
         */
        private String operationUser;

        /**
         * 送货邮政编码
         */
        private String shipZipCode;

        /**
         * 目的地县
         */
        private String shipPrefecture;

        private String shipCity;

        private String shipAddress1;

        private String shipAddress2;

        /**
         * 送货电话号码
         */
        private String shipPhoneNumber;

        private String shipEmgPhoneNumber;

    }
}
